Log

紀錄登錄共享記憶體的特定數據。

語法

KsCommandStatus Log(
     int Length,
     KsLogChannel* Channels,
     int TriggerChannel,
     double TriggerValue,
     KsLogTriggerType TriggerType,
     double Duration
);

參數

Length:儲存登錄通道的陣列長度,最多為八個通道。

Channels:各通道裡將被記錄的數據。請見 KsLogChannel 結構。

TriggerChannel:觸發記錄的通道。

TriggerValue:紀錄會在登錄通道值達到觸發值時開始。

TriggerType:觸發紀錄的方式。請見 KsLogTriggerType

Duration:欲記錄數據的時間長度,每秒為一單位,最多可記錄 10 分鐘。若設置為零,系通將繼續記錄並保存最後 10 分鐘的數據。

回傳值

返回 KsCommandStatus 結構。

備註

使用 RtOpenSharedMemory 以獲取紀錄數據時,必須使用 "KSLogSpace" 作為共享記憶體物件之名稱。

可用的 EtherCAT 狀態

ecatOP

範例

複製
double* LogData = NULL;

KsLogChannel Channels[3] =
{
    {KsLogSource::logAxis, 0, KsLogVariable::logActualPosition, 0, KsLogDataType::logDouble},
    {KsLogSource::logAxis, 0, KsLogVariable::logActualVelocity, 0, KsLogDataType::logDouble},
    {KsLogSource::logAxis, 0, KsLogVariable::logFollowingError, 0, KsLogDataType::logDouble}
};

// Stop current log
KsCommandStatus cmdStopLog = WaitForCommand(1, TRUE, StopLog());
if (!cmdStopLog.Error)
{
    // Log for 10 seconds
    KsCommandStatus cmdLog = Log(3, Channels, 0, 0, KsLogTriggerType::logImmediately, 10);
    cmdLog = WaitForCommand(11, TRUE, cmdLog);
    if (cmdLog.Done)
    {
        // Open log space
        HANDLE hLogMem = RtOpenSharedMemory(SHM_MAP_READ, FALSE, L"KSLogSpace", (void**)&LogData);
        double* data = (double*)malloc(sizeof(double) * 3 * (cmdLog.ValueLength));
        memcpy((void*)data, (void*)LogData, sizeof(double) * 3 * (cmdLog.ValueLength));
        RtCloseHandle(hLogMem); // Close log space

        // Access to log data

        free(data);
    }
}

使用需求

  RT Win32
最低支援版本 4.0 4.0
標頭檔 ksapi.h ksapi.h
程式庫 KsApi_Rtss.lib KsApi.lib

參見

AbortCommand

GetCommandStatus

StopLog

WaitForCommand